﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using Borra;
using System.Diagnostics;

namespace DeOCop
{
    public partial class frm_deocop : Form
    {
        public frm_deocop()
        {
            datos = new DataSet();
            InitializeComponent();
        }

        private DataSet datos;
        private Int32 id_directorio_actual;

        private void btn_anadir_Click(object sender, EventArgs e)
        {
            if (browser.ShowDialog() == DialogResult.OK)
            {
                lb_directorios.Items.Add(browser.SelectedPath + @"\");
                datos.Tables["directorio"].Rows.Add(Convert.ToInt32(datos.Tables["directorio"].Rows[datos.Tables["directorio"].Rows.Count - 1]["directorio_Id"]) + 1, browser.SelectedPath + @"\");
            }
        }

        private void btn_eliminar_Click(object sender, EventArgs e)
        {
            if (lb_directorios.SelectedIndex >= 0)
            {
                datos.Tables["directorio"].Rows[lb_directorios.SelectedIndex + 1].Delete();
                datos.AcceptChanges();
                lb_directorios.Items.RemoveAt(lb_directorios.SelectedIndex);
            }
        }

        private void btn_anadir_nom_Click(object sender, EventArgs e)
        {
            int i = 0;
            if (lb_directorios.SelectedIndex < 0)
                MessageBox.Show("No hay seleccionado ningún directorio padre", "Directorio padre", MessageBoxButtons.OK, MessageBoxIcon.Error);
            else if (tb_nombre.Text == "")
                MessageBox.Show("Debe de escribir el nombre de la copia a borrar", "Nombre", MessageBoxButtons.OK, MessageBoxIcon.Error);
            else if (tb_ncopias.Text == "")
                MessageBox.Show("Debe escribir el número de copias a conservar", "Número de copias", MessageBoxButtons.OK, MessageBoxIcon.Error);
            else if (!int.TryParse(tb_ncopias.Text.ToString(), out i))
                MessageBox.Show("Debe de escribir un valor numérico en número de copias", "Número de copias", MessageBoxButtons.OK, MessageBoxIcon.Error);
            else if (cb_tipo.SelectedIndex < 0)
                MessageBox.Show("Debe seleccionar el tipo de copia", "Tipo", MessageBoxButtons.OK, MessageBoxIcon.Error);
            else
            {
                string tip = " ";
                string sql = " ";
                if (cb_tipo.SelectedIndex == 0)
                    tip = "d";
                else if (cb_tipo.SelectedIndex == 1)
                    tip = "f";
                if (ch_sql.Checked)
                    sql = "s";
                else
                    sql = "n";
                lb_nombres.Items.Add(tb_nombre.Text + " | " + tb_ncopias.Text + " | " + tip + " | " + sql);
                datos.Tables["elemento"].Rows.Add(tb_nombre.Text, tb_ncopias.Text, tip, sql, id_directorio_actual);
            }
        }

        private void btn_eliminar_nom_Click(object sender, EventArgs e)
        {
            if (lb_nombres.SelectedIndex >= 0)
            {
                char[] sep = new char[1] { '|' };
                string[] cadenas = lb_nombres.SelectedItem.ToString().Split(sep);
                string nom = cadenas[0].Trim();
                string tip = cadenas[2].Trim();
                bool encontrado = false;
                for (Int32 n = 0; !encontrado && n != datos.Tables["elemento"].Rows.Count; ++n)
                {
                    if (datos.Tables["elemento"].Rows[n]["nombre"].ToString() == nom && datos.Tables["elemento"].Rows[n]["tipo"].ToString() == tip && Convert.ToInt32(datos.Tables["elemento"].Rows[n]["directorio_Id"].ToString()) == id_directorio_actual)
                    {
                        datos.Tables["elemento"].Rows[n].Delete();
                        datos.AcceptChanges();
                        encontrado = true;
                    }
                }
                lb_nombres.Items.RemoveAt(lb_nombres.SelectedIndex);
            }
        }

        private void frm_deocop_Load(object sender, EventArgs e)
        {
            datos.ReadXml("conf.xml");
            foreach (DataRow directorios in datos.Tables["directorio"].Rows)
            {
                if(directorios["ruta"].ToString() != "")
                    lb_directorios.Items.Add(directorios["ruta"]);
            }
        }

        private void lb_directorios_SelectedIndexChanged(object sender, EventArgs e)
        {
            lb_nombres.Items.Clear();
            if (lb_directorios.SelectedIndex >= 0)
            {
                DataView dv = datos.Tables["elemento"].DefaultView;
                id_directorio_actual = Convert.ToInt32(datos.Tables["directorio"].Rows[lb_directorios.SelectedIndex + 1]["directorio_Id"]);
                dv.RowFilter = "directorio_Id = " + id_directorio_actual.ToString();
                foreach (DataRow nom in dv.ToTable().Rows)
                    lb_nombres.Items.Add(nom["nombre"] + " | " + nom["numcopias"] + " | " + nom["tipo"] + " | " + nom["sql"]);
            }
        }

        private void btn_guardar_Click(object sender, EventArgs e)
        {
            if (MessageBox.Show("¿Está seguro de que desea guardar los cambios?", "Guardar", MessageBoxButtons.YesNo, MessageBoxIcon.Warning) == DialogResult.Yes)
                GuardaXml();
        }

        private void btn_borrar_Click(object sender, EventArgs e)
        {
            if (MessageBox.Show("¿Quiere guardar los cambios antes de comenzar el borrado?", "Guardar", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes)
                GuardaXml();
            if (MessageBox.Show("¿Está seguro de querer borrar las copias antiguas?", "Borrar copias", MessageBoxButtons.YesNo, MessageBoxIcon.Warning) == DialogResult.Yes)
            {
                DeleteOldCopies DOC = new DeleteOldCopies();
                DOC.ComienzaBorrado();
            }
        }
        private void GuardaXml()
        {
            datos.WriteXml("conf.xml");
        }

        private void frm_deocop_FormClosing(object sender, FormClosingEventArgs e)
        {
            if (MessageBox.Show("¿Quiere guardar los cambios antes de cerrar?", "Guardar", MessageBoxButtons.YesNo, MessageBoxIcon.Warning) == DialogResult.Yes)
                GuardaXml();
        }

        private void btn_log_Click(object sender, EventArgs e)
        {
            Process log = Process.Start("notepad.exe", "DeOCop.log");
        }
    }
}
